from sklearn.manifold import Isomap
import numpy as np
# Базовое использование
isomap = Isomap(
n_neighbors=5,
n_components=2,
metric='minkowski'
)
X_reduced = isomap.fit_transform(X)
# Получить геодезические расстояния
dist_matrix = isomap.dist_matrix_
# Реконструкция
X_reconstructed = isomap.reconstruction_error()
print(f"Reconstruction error: {isomap.reconstruction_error():.3f}")
| Параметр | Описание | Совет |
|---|---|---|
n_neighbors | Число соседей для графа | 5-20, больше = глобальнее |
n_components | Размерность выхода | 2-3 для визуализации |
radius | Радиус для ε-графа | None = использовать n_neighbors |
metric | Метрика расстояния | 'minkowski', 'cosine', etc. |
neighbors_algorithm | Алгоритм поиска соседей | 'auto', 'ball_tree', 'kd_tree' |
Геодезическое расстояние: длина кратчайшего пути по многообразию
# Тестировать разные значения
from sklearn.metrics import pairwise_distances
import matplotlib.pyplot as plt
neighbors = [5, 10, 15, 20, 30]
errors = []
for n in neighbors:
iso = Isomap(n_neighbors=n, n_components=2)
X_iso = iso.fit_transform(X)
error = iso.reconstruction_error()
errors.append(error)
print(f"n={n}: error={error:.3f}")
# Визуализировать
plt.plot(neighbors, errors, 'o-')
plt.xlabel('n_neighbors')
plt.ylabel('Reconstruction Error')
plt.title('Выбор n_neighbors')
plt.show()
# Выбрать минимум или "колено" ✅ Масштабирование
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
✅ Удаление выбросов: выбросы могут искажать граф соседей
✅ Связность графа: проверить, что граф связен
from scipy.sparse.csgraph import connected_components
# Построить граф
from sklearn.neighbors import kneighbors_graph
G = kneighbors_graph(X, n_neighbors=5, mode='distance')
# Проверить связность
n_components, labels = connected_components(G)
print(f"Компонент связности: {n_components}")
# Должна быть 1! | Проблема | Решение |
|---|---|
| Граф не связен | Увеличить n_neighbors |
| Плохое качество | Подобрать n_neighbors, проверить данные |
| Медленная работа | Уменьшить размер данных, использовать подвыборку |
| Много памяти | Sparse distances, меньше точек |
| Short-circuit | Уменьшить n_neighbors (граф слишком плотный) |
| Метод | Преимущества Isomap | Недостатки Isomap |
|---|---|---|
| PCA | Нелинейное, лучше для изогнутых данных | Медленнее, требует связности |
| t-SNE | Сохраняет глобальную структуру | Хуже для локальных структур |
| LLE | Лучше глобальная структура | Хуже для hole-данных |
| UMAP | Теоретически обоснован | Медленнее, менее гибкий |
«Isomap "разворачивает" сложные искривленные структуры в данных, сохраняя истинные расстояния вдоль поверхности. Как разглаживание мятой бумаги — метод находит двумерное представление, где расстояния соответствуют путям по исходной поверхности данных».